import Enum from '../libs/const'
import dayjs from 'dayjs'
export function date (input, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!input) return ''
  return dayjs(input).format(format)
}

/** 支付宝代缴 缴费模式 */
export function chargeMode (input) {
  return {
    2: '账单模式',
    4: '缴清欠费模式',
    5: '欠费自由缴模式'
  }[+input]
}
export const deviceType = input => {
  input = +input
  if (!input) return '全部'
  return Enum.DeviceTypeEnum.properties[input] && Enum.DeviceTypeEnum.properties[input].name
}

export const financePaymentType = input => Enum.FinancePaymentType[input] || ''
export const financeSettleType = input => Enum.FinanceSettleType[input] || ''
// 工单延期等标签
export const ticketTags = tags => {
  return Array.isArray(tags) ? tags.map(tag => Enum.ticketTags[tag] || '').join(' | ') : Enum.ticketTags[tags] || ''
}

// 统计ticket_devices产品型号数量
export const ticketMultiDeviceType = devices => {
  const sum = devices.reduce((result, device) => {
    let key
    if (device.device_product && device.device_product.name) {
      key = device.device_product.name // 维修和拆卸工单详情的ticket_devices有sn则必定含有产品型号
    } else if (device.product_type) {
      key = device.product_type // ticket_device添加product_type表示产品类型. 旧数据没有
    } else if (Enum.DeviceTypeEnum.properties[device.device_type]) {
      key = Enum.DeviceTypeEnum.properties[device.device_type].name // 上面的数据都没有. 使用设备类型统计
    }
    if (!key) return result
    if (!result[key]) result[key] = 0
    result[key] += 1
    return result
  }, {})
  let result = []
  for (let productName in sum) {
    result.push(`${sum[productName]}个${productName}`)
  }
  return result.join(', ')
}

export const ticketDeviceType = input => {
  const map = {
    1: '仅装网关',
    2: '有网关门锁',
    3: '电表',
    4: '无网关门锁',
    6: '冷水表',
    7: '热水表'
  }
  return map[+input] || '-'
}

const ticketDeviceDetail = (devices) => {
  return devices
    .map(
      item => item.name + ' ' + item.estimate_quantity + '个'
    )
    .join(', ')
}

export default {
  date,
  chargeMode,
  ticketTags,
  deviceType (input) {
    if (!input) return ''
    return Enum.DeviceTypeEnum.properties[input].name
  },
  ticketDeviceType,
  ticketMultiDeviceType,
  ticketDeviceModel ({ product_device_list, service_target, service_type }) {
    let arr = []
    // 清空空对象 [{}]
    if (product_device_list) { // 是否为先款后货，存在则为先款后货
      arr = product_device_list.filter(item => item.name)
    }
    if (service_type === 1 || service_type === 4) {
      // 新装工单
      // 如果为先款后货展示: 设备类型 + 下单设备
      return `${ticketDeviceType(service_target)}${
        arr.length ? `: ${ticketDeviceDetail(arr)}` : ''
      }`
      // 新装工单非先款后货
    } else if (arr.length) {
      // 其他
      return ticketDeviceDetail(arr)
    }
    return '-'
  },
  ticketInstalledDeviceModel (input) {
    if (Array.isArray(input)) {
      return input.map(item => (item.device_product_name || item.device_product.name) + ' ' + item.quantity + '个').join(', ')
    }
    return ''
  },
  WOInstallStatus (input) {
    // 工单 - 预约安装状态
    const map = Enum.TicketInstallState
    return map[input]
  },
  WORepairStatus (input) {
    // 工单 - 售后维修状态
    const map = Enum.TicketRepairState
    return map[input]
  },
  dateAddHour (input, hour = 0) {
    if (!input) return ''
    const str = dayjs(input)
      .add(hour, 'hour')
      .format('YYYY-MM-DD HH:mm')
    return str
  },
  ticketState (input, ticketType) {
    // 工单状态
    if (!Enum.TicketState[ticketType]) return ''
    return Enum.TicketState[ticketType][input]
  },
  appointmentPeriod (input) {
    return Enum.AppointmentPeriod[input]
  },
  poundageType (input) {
    const map = {
      1: '商户',
      2: '租客'
    }
    return map[input]
  }
}
